// https://github.com/OneWayTech/vue-auth-solution
/*** src/mixins/session.js ***/
import authService from '@/services/authService'; // 权限相关的 API 封装服务
const goToSSO = () => {
  location.replace(
    `<我司单点登录 URL>?returnUrl=${encodeURIComponent(location.href)}`
  );
};

/* 登录凭据 */
export const session$ = {
  id: null,
  username: '',
  role: '',
  isLeader: null
};

/* 是否管理员 */
export const isAdmin$ = () => {
  return session$.role === 'admin';
};

/* 是否销售主管 */
export const isSalesLeader$ = () => {
  return session$.role === 'sales' && session$.isLeader;
};

/* 挂载 DOM 前调用本函数 */
export const syncSession$ = () => {
  return authService
    .getSession()
    .then(sess => {
      Object.assign(session$, sess); // 这里不建议写成 session$ = sess
    })
    .catch(() => {
      goToSSO(); // 跳转到单点登录
      throw new Error('Redirecting to SSO'); // 继续抛出，避免之后的 then 执行挂载 DOM
    });
};

// @export.default <mixin>
export default {
  data: () => ({
    session$
  }),
  computed: {
    isAdmin$,
    isSalesLeader$
  },
  methods: {
    logout$() {
      authService.logout().then(goToSSO);
    }
  }
};
